package concurrent.c_012_ThreadPool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 认识 Executors
 * Executors 工具类给我们提供了不少快捷创建线程池的方法，虽然我们不推荐使用。
 * 但是里面有个方法还是不错的：Executors.newSingleThreadExecutor()
 * 如果把这个当作全局线程池，可以很好实现异步，并且还能保证任务的顺序执行，进而达到消峰的效果
 * 用 newFixedThreadPool 的话，也是能够达到顺序执行的效果的。因为内部的阻塞队列是 FIFO 的实现
 */
public class T04_Executors {
    private static final ExecutorService executorService = Executors.newSingleThreadExecutor();
    // private static final ExecutorService executorService = Executors.newFixedThreadPool(5);
    private static AtomicInteger num = new AtomicInteger();

    public static void main(String[] args) {
        for (int i = 0; i < 20; i++) {
            executorService.execute(() -> {
                num.getAndIncrement();
                System.out.println(Thread.currentThread().getName() + "-->>>>" + num);
            });
        }
        executorService.shutdown();
    }
}